package cc.rengu.igas.bomp.core.service.trans;

import cc.rengu.igas.bomp.common.dao.MchntLevelInfoMapper;
import cc.rengu.igas.bomp.common.dao.impl.MchntLevelInfoMapperImpl;
import cc.rengu.igas.bomp.common.entity.MchntLevelInfo;
import cc.rengu.igas.bomp.common.enums.RespCodeEnum;
import cc.rengu.igas.bomp.core.service.base.ManageService;
import cc.rengu.igas.bomp.facade.bean.MchntLevelInfoBean;
import cc.rengu.igas.bomp.facade.request.MchntLevelListQueryRequest;
import cc.rengu.igas.bomp.facade.response.MchntLevelListQueryResponse;
import cc.rengu.oltp.service.common.constant.AppParamConstant;
import cc.rengu.oltp.service.model.BizResponse;
import cc.rengu.oltp.utility.bean.PageInfo;
import cc.rengu.oltp.utility.bean.PageResult;
import cc.rengu.oltp.utility.util.BeanUtil;
import cc.rengu.oltp.utility.util.ConvertUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 商户等级列表查询
 * Created by 赵奎伍
 */
public class MchntLevelListQueryService extends ManageService {
    @Override
    protected Object bizBeforeCust() throws Exception {
        MchntLevelListQueryRequest mchntLevelListQueryRequest = new MchntLevelListQueryRequest();
        ConvertUtil.convertOutput(mchntLevelListQueryRequest);
        return mchntLevelListQueryRequest;
    }

    @Override
    protected BizResponse bizProcessCust(Object request) throws Exception {
        MchntLevelListQueryRequest mchntLevelListQueryRequest = (MchntLevelListQueryRequest) request;
        MchntLevelListQueryResponse mchntLevelListQueryResponse = new MchntLevelListQueryResponse();
        BeanUtil.beanCopy(mchntLevelListQueryRequest, mchntLevelListQueryResponse);

        MchntLevelInfoMapper mchntLevelInfoMapper = new MchntLevelInfoMapperImpl();
        List<MchntLevelInfo> mchntLevelInfoList = new ArrayList<MchntLevelInfo>();

        int pageIndex = mchntLevelListQueryRequest.getPageIndex();
        int pageSize = mchntLevelListQueryRequest.getPageSize();
        PageInfo pageInfo = new PageInfo();
        pageInfo.setPageIndex(pageIndex);
        pageInfo.setPageSize(pageSize);

        if ((null != mchntLevelListQueryRequest.getMchntLevel() && !mchntLevelListQueryRequest.getMchntLevel().isEmpty()) || (null != mchntLevelListQueryRequest.getMchntLevelName() && !mchntLevelListQueryRequest.getMchntLevelName().isEmpty())) {
            /* 根据商户等级与商户等级名称模糊查询 */
            if (-1 == pageIndex || -1 == pageSize) {
                mchntLevelInfoList = mchntLevelInfoMapper.selectMchntLevelInfoByMchntLevelOrMchntLevelName(mchntLevelListQueryRequest.getHeader().getInstId(), mchntLevelListQueryRequest.getMchntLevel(), mchntLevelListQueryRequest.getMchntLevelName());
            } else {
                PageResult pageResult = mchntLevelInfoMapper.selectMchntLevelInfoByMchntLevelOrMchntLevelNameByPage(mchntLevelListQueryRequest.getHeader().getInstId(), mchntLevelListQueryRequest.getMchntLevel(), mchntLevelListQueryRequest.getMchntLevelName(), pageInfo);
                if (null != pageResult) {
                    pageInfo = pageResult.getPageInfo();
                    mchntLevelInfoList = pageResult.getResult().stream().map(item -> (MchntLevelInfo) item).collect(Collectors.toList());
                }
            }
        } else {
            /* 根据多法人标识查询所有信息*/
            if (-1 == pageIndex || -1 == pageSize) {
                mchntLevelInfoList = mchntLevelInfoMapper.selectMchntLevelInfoByInstId(mchntLevelListQueryRequest.getHeader().getInstId());
            } else {
                PageResult pageResult = mchntLevelInfoMapper.selectMchntLevelInfoByInstIdByPage(mchntLevelListQueryRequest.getHeader().getInstId(), pageInfo);
                if (null != pageResult) {
                    pageInfo = pageResult.getPageInfo();
                    mchntLevelInfoList = pageResult.getResult().stream().map(item -> (MchntLevelInfo) item).collect(Collectors.toList());
                }
            }
        }
        if (null != mchntLevelInfoList && !mchntLevelInfoList.isEmpty()) {
            List<MchntLevelInfoBean> mchntLevelInfoBeans = new ArrayList<>();
            mchntLevelInfoList.forEach(item -> convMchntLevelInfo(item, mchntLevelInfoBeans));
            /* 查询结果赋值 */
            mchntLevelListQueryResponse.setTotalRows(pageInfo.getTotalRows());//总记录数
            mchntLevelListQueryResponse.setTotalPage(pageInfo.getTotalPage());//总页数
            mchntLevelListQueryResponse.setMchntLevelInfoList(mchntLevelInfoBeans);
        } else {
            rglog.error("法人行<{}>还未配置商户等级列表信息!", mchntLevelListQueryRequest.getHeader().getInstId());
        }
        /* 按照接口转换基础产品信息并响应给请求方 */
        BizResponse bizResponse = new BizResponse();
        bizResponse.setRspSysId(AppParamConstant.SYS_ID);
        bizResponse.setRespCode(RespCodeEnum.TRANS_SUCCESS.getRespCode());
        bizResponse.setRespDesc(RespCodeEnum.TRANS_SUCCESS.getRespDesc());
        bizResponse.setResult(mchntLevelListQueryResponse);
        return bizResponse;
    }

    @Override
    protected void bizAfterCust(Object response) throws Exception {
        BizResponse bizResponse = (BizResponse) response;
        MchntLevelListQueryResponse mchntLevelListQueryResponse = (MchntLevelListQueryResponse) bizResponse.getResult();
        ConvertUtil.convertInput(mchntLevelListQueryResponse);
    }

    /**
     * 将数据库表结构对象转换成接口对象
     *
     * @param mchntLevelInfo      数据库表结构对象
     * @param mchntLevelInfoBeans 接口对象
     */
    private void convMchntLevelInfo(MchntLevelInfo mchntLevelInfo, List<MchntLevelInfoBean> mchntLevelInfoBeans) {
        if ("01".equals(mchntLevelInfo.getMchntLevelStatus())) {
            //商户等级 只展示正式状态的数据  00-非正式   01-正式   02-停用 03-已注销
            MchntLevelInfoBean mchntLevelInfoBean = new MchntLevelInfoBean();
            BeanUtil.beanCopy(mchntLevelInfo, mchntLevelInfoBean);
            mchntLevelInfoBean.setMchntLevel(mchntLevelInfo.getMchntLevelCode());
            mchntLevelInfoBeans.add(mchntLevelInfoBean);
        }
    }
}

